package interactiond

import (
	"time"
)

// ITMode 互动类型 模式
type ITMode int

const (
	// ITModeCount 累计
	ITModeCount ITMode = 0
	// ITModeOne 最后一次
	ITModeOne = 1
)

// ITStatus 互动类型状态
type ITStatus int

const (
	// ITStatusDel 删除
	ITStatusDel ITStatus = -1
	// ITStatusInit 初始化
	ITStatusInit ITStatus = 0
	// ITStatusLock 锁定
	ITStatusLock ITStatus = 1
)

// TypeDesc 互动类型描述值
type TypeDesc struct {
	Code     string   `json:"code"`      // 编码
	Name     string   `json:"name"`      // 名称
	Mode     ITMode   `json:"mode"`      // 用户模式模式 0 累计计数 1 最后一次计数
	IsPublic int      `json:"is_public"` // 是否开放 0 不开放，1公开
	IsAgv    bool     `json:"is_agv"`    // 是否启用平均值
	Max      int      `json:"max"`       // 最大分数
	Min      int      `json:"min"`       // 最小分数
	Status   ITStatus `json:"status"`    // 状态 0 初始化<br/> -1 删除 <br/>1 发布
}

// IGTargetType 互动组目标类型
type IGTargetType int

const (
	// IGTTInfo 信息
	IGTTInfo IGTargetType = 1
	// IGTTColumn  栏目
	IGTTColumn IGTargetType = 2
	// IGTTGroup 信息组
	IGTTGroup IGTargetType = 3
	// IGTTSpecial 专题
	IGTTSpecial IGTargetType = 4
	// IGTTReplay 评论
	IGTTReplay IGTargetType = 5
	// IGTTOrg  组织
	IGTTOrg IGTargetType = 6
	// IGTTPerson 个人
	IGTTPerson IGTargetType = 7
	// IGTTOther 其他
	IGTTOther IGTargetType = 99
)

// GroupDesc 互动组描述值对象
type GroupDesc struct {
	TargetID   string       `json:"target_id"`   // 互动目标ID
	TargetType IGTargetType `json:"target_type"` // 互动目标类型
	CreTime    time.Time    `json:"cre_time"`    // 创建时间
}

// IGStatus 互动组状态
type IGStatus int

const (
	// IGStatusNormal 正常
	IGStatusNormal IGStatus = 0
	// IGStatusDelete 删除
	IGStatusDelete IGStatus = -1
)

// GroupCtrl 互动组控制参数
type GroupCtrl struct {
	Status      IGStatus `json:"status"`        // 状态
	IsReplay    int      `json:"is_replay"`     // 是否允许发评论 0 不允许发评论<br/>1允许登录用户匿名发评论<br/>2 登录用户必须实名发评论（使用系统昵称）
	IsReplayChk int      `json:"is_replay_chk"` // 发评论审核模式 0 不需要审核  <br/>1 需要所有者审核 <br/>2 需要组织审核 <br/>3 需要平台审核
	AllowCodes  []string `json:"allow_codes"`   // 是否允许互动模式
}

// GroupTotal 互动组互动统计值对象
type GroupTotal struct {
	ITCode     string  `json:"it_code"`     // 互动类型
	Total      int     `json:"total"`       // 数量
	TotalScore int     `json:"total_score"` // 总分数
	AvgScore   float64 `json:"avg_score"`   // 平均分数
}

// ReplayPath 评论关系
type ReplayPath struct {
	IGID     string `json:"igid"`      // 互动组ID
	ParentID string `json:"parent_id"` // 上级评论ID 填写时为1级评论
}

// ReplayDesc 评论描述实例
type ReplayDesc struct {
	Context string  `json:"context"` // 评论内容
	Status  RStatus `json:"status"`  // 状态
}

// Operator 操作者
type Operator struct {
	Creator    string    `json:"creator"`               // 创建人
	CreTime    time.Time `json:"cre_time"`              // 创建时间
	DeleteTime time.Time `json:"delete_time,omitempty"` // 删除时间
	Deleter    string    `json:"deleter,omitempty"`     // 删除人
}

// ChildReplyTotal 子评论信息汇总
type ChildReplyTotal struct {
	LastTime     time.Time `json:"last_time"`     // 子评论最后评论时间
	LastReplayer string    `json:"last_replayer"` // 子评论最后评论人
	ReplayNum    int       `json:"replay_num"`    // 子评论数量
	LikeNum      int       `json:"like_num"`
}

// RStatus 评论状态
type RStatus int

// 评论状态值对象
const (
	// RStatusDel 删除
	RStatusDel RStatus = -1
	// RStatusNormal 正常
	RStatusNormal RStatus = 0
	// RStatusWaitChk 待审核
	RStatusWaitChk RStatus = 1
	// RStatusChkNo 审核不通过
	RStatusChkNo RStatus = 2
)

// ReplayCheck 评论审核值对象
type ReplayCheck struct {
	Checker   string    `json:"checker"`    // 审核人
	ChkTime   time.Time `json:"chk_time"`   // 审核时间
	ChkContet string    `json:"chk_contet"` // 审核意见
	ChkResult bool      `json:"chk_result"` // 审核结果
}

// InteractionDesc 互动描述值对象
type InteractionDesc struct {
	IGID  string `json:"igid"`  // 互动组ID
	Code  string `json:"code"`  // 类型
	UID   string `json:"uid"`   // 互动用户
	Value int    `json:"value"` // 值
}
